package org.base.common.service;

import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import org.base.common.pojo.PageResult;
import org.base.common.query.Query;
import org.base.common.util.Pair;

import java.util.List;

/**
 * 基础业务类接口
 *
 * @param <T>
 */
public interface IService<T, Q extends Query> extends com.baomidou.mybatisplus.extension.service.IService<T> {

    /**
     * 根据查询条件查询
     *
     * @param query
     * @return
     */
    List<T> getByQuery(Q query);

    /**
     * 根据分页查询条件查询
     *
     * @return
     */
    PageResult getByPageQuery(Q query);

    /**
     * 根据Query组装LambdaQueryChainWrapper
     *
     * @param query
     * @return
     */
    LambdaQueryChainWrapper<T> lambdaQuery(Q query);

    /**
     * 是否唯一存在
     *
     * @return
     */
    boolean isExist(Long id, SFunction<T, ?> filed, Object val);

    boolean isExist(Long id, Pair<SFunction<T, ?>, Object>... pair);

}
